home *** CD-ROM | disk | FTP | other *** search
/ The CICA Windows Explosion! / The CICA Windows Explosion! - Disc 2.iso / programr / cat_exe.zip / LIFE_3.CAR < prev    next >
Text File  |  1994-11-18  |  3KB  |  94 lines

  1. (* enhanced version of Conveys LIFE program with 4 different states:
  2.    alive, dead, just_born, just_died
  3.    and some statistical information *)
  4.  
  5. RECIPE  XYSize  =  20;
  6.         Zet     =  4;
  7.         Colors  =  4;
  8.  
  9. CONST dead      = %00; (* bit sample 0000 *)
  10.       just_died = %01; (* bit sample 0001 *)
  11.       just_born = %10; (* bit sample 0010 *)
  12.       alive     = %11; (* bit sample 0011 *)
  13.               (*                       A  *)
  14.               (*                       |  *)
  15.               (*              "alive bit" *)
  16.  
  17. REF   east    [1,0];
  18.       west      [-1,0];
  19.       north     [0,-1];
  20.       south     [0,1];
  21.       north_ea    [1,-1];
  22.       north_we  [-1,-1];
  23.       south_ea  [1,1];
  24.       south_we  [-1,1];
  25.  
  26. VAR  a, dead_count, alive_count, generation_count;
  27.  
  28.  
  29. PROC add_second_bit:;    (* procedure evaluates second bit of   *)
  30.                          (* neighbors that indicate alive state *)
  31. BEGIN                    (* and returns sum of found bits       *)
  32. RETURN ((east XOR %01) SHR 1) + ((west XOR %01) SHR 1) +
  33.        ((north XOR %01) SHR 1)   + ((south XOR %01) SHR 1) +
  34.        ((north_ea XOR %01) SHR 1) + ((north_we XOR %01) SHR 1) +
  35.        ((south_ea XOR %01) SHR 1)   + ((south_we XOR %01) SHR 1)
  36. END add_second_bit;
  37.  
  38. EVENT SetUp;
  39.       PlClipActive;
  40.       dead_count := 0;
  41.       alive_count := 0;
  42.       generation_count := 0;
  43.  
  44. EVENT E0; (* assignment of colors to states *)
  45.       RGBBrush (dead, 0, 0, 0);          (* black *)
  46.       RGBBrush (just_died, 152, 88, 46); (* brown *)
  47.       RGBBrush (just_born, 74, 229, 3);  (* light green *)
  48.       RGBBrush (alive, 50, 174, 30);     (* dark green *)
  49.  
  50. EVENT E1; (* initialization a *)
  51.      PARALLEL DO
  52.      a := Random (500);
  53.      IF a > 492
  54.        THEN Self := alive
  55.        ELSE Self := dead
  56.      FI;
  57.      OD;
  58.      ShowPlane;
  59.  
  60. EVENT E2; (* initialization b *)
  61.    PlFillRandom (dead, alive);
  62.    generation_count := 0;
  63.    ShowPlane;
  64.  
  65. EVENT E3;
  66. generation_count := generation_count + 1;
  67.  
  68. PARALLEL DO
  69. a := add_second_bit;
  70.  
  71. IF (a = 2) OR (a = 3)
  72.   THEN IF (a = 3) AND ((Self = dead) OR (Self = just_died))
  73.        THEN Self := just_born;
  74.             alive_count := alive_count + 1;
  75.        ELSE Self := alive;
  76.             alive_count := alive_count + 1;
  77.        FI;
  78.   ELSE IF (Self = alive) OR (Self = just_born)
  79.        THEN Self := just_died;
  80.             dead_count := dead_count + 1;
  81.        ELSE Self := dead;
  82.             dead_count := dead_count + 1;
  83.        FI;
  84. FI;
  85. OD;
  86.  
  87. WRITE ('', 'GEN. :', generation_count, ' DEAD :', dead_count, ' ALIVE :', alive_count );
  88. dead_count := 0;
  89. alive_count := 0;
  90. ShowPlane;
  91.  
  92. END.
  93.  
  94.